﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using Ferreteria.Clases;
using System.Configuration;

namespace Ferreteria
{
    public partial class frmPresentación : Form
    {
        public bool Salida = false;

        public frmPresentación()
        {
            InitializeComponent();

            //Clases.Funcion.ProtectSection("connectionStrings");

            //btnSiguiente.Enabled = false;
            btnSiguiente.Enabled = true;

            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            ConnectionStringSettings conDisanco = config.ConnectionStrings.ConnectionStrings["DisancoEntities"];

            Clases.Constantes.cadenaConexion = conDisanco.ConnectionString;
        }

        private void btnSiguiente_Click(object sender, EventArgs e)
        {
            Salida = true;
            this.Close();
        }

        private bool ejecutarTest()
        {
            int i;
            dgvPruebas.Rows.Clear();

            //Prueba de escritura
            i = dgvPruebas.Rows.Add();
            dgvPruebas.Rows[i].Cells[0].Value = "Realizando prueba de escritura";

            int valorAlmacenado = Clases.Constantes.maximo_int32;

            try
            {
                DisancoEntities context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
                PruebaConexion prueba = new PruebaConexion();

                prueba.id = 1;
                prueba.numero_aleatorio = valorAlmacenado;

                context.PruebaConexion.AddObject(prueba);
                context.SaveChanges();

                dgvPruebas.Rows[i].Cells[1].Value = Ferreteria.Properties.Resources.icon_ok;
            }
            catch
            {
                dgvPruebas.Rows[i].Cells[1].Value = Ferreteria.Properties.Resources.icon_error;
                return false;
            }

            //Prueba de lectura
            i = dgvPruebas.Rows.Add();
            dgvPruebas.Rows[i].Cells[0].Value = "Probando leer de la base de datos";

            try
            {
                DisancoEntities context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
                PruebaConexion prueba = context.PruebaConexion.First(p => p.id == 1);

                if (prueba.numero_aleatorio == valorAlmacenado)
                {
                    dgvPruebas.Rows[i].Cells[1].Value = Ferreteria.Properties.Resources.icon_ok;
                }
                else
                {
                    dgvPruebas.Rows[i].Cells[1].Value = Ferreteria.Properties.Resources.icon_error;
                    return false;
                }
            }
            catch
            {
                dgvPruebas.Rows[i].Cells[1].Value = Ferreteria.Properties.Resources.icon_error;
                return false;
            }

            //Prueba de borrado
            i = dgvPruebas.Rows.Add();
            dgvPruebas.Rows[i].Cells[0].Value = "Probando borrar de la base de datos";

            try
            {
                DisancoEntities context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
                PruebaConexion prueba = context.PruebaConexion.First(p => p.id == 1);
                context.PruebaConexion.DeleteObject(prueba);
                context.SaveChanges();

                dgvPruebas.Rows[i].Cells[1].Value = Ferreteria.Properties.Resources.icon_ok;
            }
            catch
            {
                dgvPruebas.Rows[i].Cells[1].Value = Ferreteria.Properties.Resources.icon_error;
                return false;
            }

            return true;
        }

        private void frmPresentación_Load(object sender, EventArgs e)
        {
            cargaInicial();
        }

        private void cargaInicial()
        {
            int i;

            //if (ejecutarTest())
            //{

                DisancoEntities context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

                if (context.Usuarios.Count() == 0)
                {
                    i = dgvPruebas.Rows.Add();
                    dgvPruebas.Rows[i].Cells[0].Value = "Creando usuario administrador por defecto";
                    //Creo uno llamado admin, con password admin, y privilegios de administrador
                    try
                    {

                        MD5 md5Hash = MD5.Create();

                        Usuarios userAdmin = new Usuarios();
                        userAdmin.usuario_nombre = "admin";
                        userAdmin.usuario_nombrecompleto = "Usuario administrador por defecto";
                        userAdmin.usuario_categoria = Categoria.Administrador;
                        userAdmin.usuario_pass = md5Hash.ComputeHash(Encoding.UTF8.GetBytes("cmr.rde"));

                        context.Usuarios.AddObject(userAdmin);
                        context.SaveChanges();

                        dgvPruebas.Rows[i].Cells[1].Value = Ferreteria.Properties.Resources.icon_ok;
                    }
                    catch
                    {
                        dgvPruebas.Rows[i].Cells[1].Value = Ferreteria.Properties.Resources.icon_error;
                    }
                }

                if (context.Rubros.Count() == 0)
                {
                    i = dgvPruebas.Rows.Add();
                    dgvPruebas.Rows[i].Cells[0].Value = "Creando rubros Ferreteria y Sanitarios";

                    try
                    {
                        Rubros rubroFerreteria = new Rubros();
                        rubroFerreteria.rubro_nombre = "Ferreteria";
                        context.Rubros.AddObject(rubroFerreteria);

                        Rubros rubroSanitarios = new Rubros();
                        rubroSanitarios.rubro_nombre = "Sanitarios";
                        context.Rubros.AddObject(rubroSanitarios);

                        context.SaveChanges();
                        dgvPruebas.Rows[i].Cells[1].Value = Ferreteria.Properties.Resources.icon_ok;
                    }
                    catch
                    {
                        dgvPruebas.Rows[i].Cells[1].Value = Ferreteria.Properties.Resources.icon_error;
                    }
                }

                if (context.CondicionIVA.Count() == 0)
                {
                    i = dgvPruebas.Rows.Add();
                    dgvPruebas.Rows[i].Cells[0].Value = "Creando las condiciones de IVA";

                    try
                    {
                        CondicionIVA condRI = new CondicionIVA();
                        condRI.condicion_nombre = "Responsable Inscripto";
                        condRI.condicion_sigla = "RI";
                        context.CondicionIVA.AddObject(condRI);

                        CondicionIVA condCF = new CondicionIVA();
                        condCF.condicion_nombre = "Consumidor Final";
                        condCF.condicion_sigla = "CF";
                        context.CondicionIVA.AddObject(condCF);

                        CondicionIVA condRNI = new CondicionIVA();
                        condRNI.condicion_nombre = "Responsable No Inscripto";
                        condRNI.condicion_sigla = "RNI";
                        context.CondicionIVA.AddObject(condRNI);

                        CondicionIVA condEX = new CondicionIVA();
                        condEX.condicion_nombre = "Exento";
                        condEX.condicion_sigla = "EX";
                        context.CondicionIVA.AddObject(condEX);

                        CondicionIVA condMT = new CondicionIVA();
                        condMT.condicion_nombre = "Monotributista";
                        condMT.condicion_sigla = "MT";
                        context.CondicionIVA.AddObject(condMT);

                        context.SaveChanges();
                        dgvPruebas.Rows[i].Cells[1].Value = Ferreteria.Properties.Resources.icon_ok;
                    }
                    catch
                    {
                        dgvPruebas.Rows[i].Cells[1].Value = Ferreteria.Properties.Resources.icon_error;
                    }
                }

           //btnSiguiente.Enabled = true;
            //}
            //else
            //{
            //    btnSiguiente.Enabled = false;
            //}
        }

        private void btn_Click(object sender, EventArgs e)
        {
            frmConeccionDB db = new frmConeccionDB();
            db.ShowDialog();

            //cargaInicial();
        }

        private void btnTest_Click(object sender, EventArgs e)
        {
            cargaInicial();
            btnSiguiente.Enabled = true;
            ejecutarTest();
            if (ejecutarTest())
            {
                btnSiguiente.Enabled= true;
            }
            else
            {
                btnSiguiente.Enabled = false;
            }
        }

    }
}
